package red.mlz.console.controller.excel;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import red.mlz.module.module.excel.entity.DownloadData;
import red.mlz.module.module.excel.entity.UploadData;
import red.mlz.module.module.excel.service.ExcelService;
import red.mlz.module.module.excel.service.UploadDataListener;
import red.mlz.module.utils.Response;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

@RestController
@Slf4j
public class ExcelController {


    @Autowired
    private ExcelService excelService;


    /**
     * 文件上传
     * <p>1. 创建excel对应的实体对象 参照{@link UploadData}
     * <p>2. 由于默认一行行的读取excel，所以需要创建excel一行一行的回调监听器，参照{@link UploadDataListener}
     * <p>3. 直接读即可
     */
    @PostMapping("/excel/upload")
    public Response upload(MultipartFile file) {
        List<UploadData> result = excelService.read(file);
        return new Response(1001, result);
    }


    /**
     * 文件下载（失败了会返回一个有部分数据的Excel）
     * <p>
     * 1. 创建excel对应的实体对象 参照{@link DownloadData}
     * <p>
     * 2. 设置返回的 参数
     * <p>
     * 3. 直接写，这里注意，finish的时候会自动关闭OutputStream,当然你外面再关闭流问题不大
     */
    @RequestMapping("/excel/download")
    public void download(HttpServletResponse response) {
        excelService.download(response);

    }
}
